package leetCode.solution;
/**
 * 给你一个链表的头节点 head ，旋转链表，将链表每个节点向右移动 k 个位置。
 * @author jerry
 * @ClassName:  Solution61   
 * @Description:TODO(描述这个类的作用)   
 * @date 2023年3月29日 下午1:38:25
 */
public class Solution61 {
	public static void main(String[] args) {

	}

	public ListNode rotateRight(ListNode head, int k) {
		if(k==0 || head==null || head.next==null) return head;
		
		// 获取长度n
		int n = 1;
		ListNode iter = head;
		while(iter.next!=null) {
			iter=iter.next;
			n++;
		}
		
		// 移动数
		int move = k%n;
		
		// 找到移动后的尾节点，因为组后要把环打开
		int tail = n-move;
		
		// 旋转整数圈
		if(tail==n) return head;
		
		// 组成环
		iter.next=head;
		
		// 尾节点移动tail次
		while (tail-- > 0) {
			iter = iter.next;
		}
		ListNode newHead = iter.next;
		iter.next=null;
		return newHead;
    }
	class ListNode {
		int val;
		ListNode next;
		
		ListNode() {
		}
		
		ListNode(int val) {
			this.val = val;
		}
		
		ListNode(int val, ListNode next) {
			this.val = val;
			this.next = next;
		}
	}
}

